home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 017 / bat203.lbr / batlist.lst < prev   
File List  |  2011-01-30  |  40KB  |  1,136 lines

  1.  
  2.  
  3.  
  4.         BATLIST.DOC   =BATLIST.LST
  5.  
  6.             BAT  -  AN EXTENDED BATCH FACILITY V1.02
  7.             Frank J. Canova Jr.
  8.             Dept.26p / 031-3
  9.             Boca Raton, FL
  10.             BCRVM1(VM212544)
  11.  
  12.                    INTRODUCTION
  13.                    ____________
  14.  
  15.         There  is  a deficiency in DOS batch files which I couldn't  stand  to 
  16.         see.   That is,  they are very dumb.   I am a user that loves to see a 
  17.         user friendly interface in order to talk to my programs.  There seemed 
  18.         to be almost no way to do this with batch files.
  19.  
  20.         Because  of  the lack of control one has over batch files,  I  created 
  21.         this extended batch facility, or BAT for short.  With it, you have the 
  22.         ability to do .  .  .
  23.  
  24.             * String concatination
  25.             * Simple expressions and substitutions
  26.             * Looping of tasks
  27.             * Better control of messages to the screen
  28.             * Return Codes
  29.             * Simple conditionals
  30.             * Serch for files or tell if they exist
  31.             * Accept responces from the user
  32.  
  33.         Described in these pages is my solution to batch files.   I hope  that 
  34.         you  will  find it useful as well.   The user of VM/370 will  note  an 
  35.         amazing similarity to EXECs .  .  .  why spoil a good thing?!
  36.  
  37.              Improvements
  38.              ____________
  39.  
  40.         I am very aware that many improvements can be made.  To the best of my 
  41.         knowledge,  this program works as advertised.  Please don't bug me too 
  42.         much  about making improvements since I am probably aware of what they 
  43.         already are.   Although there may be some enhancements to BAT .   .  .  
  44.         don't expect it to get to the level of VM/370.   This is all on my own 
  45.         time ya' know!
  46.  
  47.              Classification
  48.              ______________
  49.  
  50.         The BAT program was written in its entireity on my own time and my own 
  51.         equipment.    Please  feal  free  to  distribute  it  freely  to  your 
  52.         colleagues  and members of you local IBM personal  computer  club.   I 
  53.         reserve  all  rights to this program although I do not presently  have 
  54.         plans to submit this software to be published.
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.                                            1
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.              DOS Dependency
  71.              ______________
  72.  
  73.         This level of BAT executes only with DOS 1.1.  BAT is restricted as to 
  74.         which  DOS  levels  it  can run with because of  the  high  amount  of 
  75.         parameter passing to/from COMMAND.COM that is necessary.   If you  run 
  76.         with the wrong level of DOS, you will get an error message.
  77.  
  78.  
  79.  
  80.                    HOW BATCH FILES ARE EXECUTED
  81.                    ____________________________
  82.  
  83.         Batch  files  are  files which normally contain a series  of  commands 
  84.         which  is  read from the file and entered through DOS just as  if  the 
  85.         user had typed the line.   It's primary function was to save the  user 
  86.         time  and trouble from having to enter a repetative series of commands 
  87.         to the system to perform some task.
  88.  
  89.         With the extended batch facility (BAT), the batch file can now contain 
  90.         not  only these same repetative DOS commands,  but  control  commands, 
  91.         prompts,  and other misc.   parameters.  In general, it gives the user 
  92.         more frendly control over programs in his system.
  93.  
  94.         The extensions to batch processing is accomplished by adding a control 
  95.         program  BAT.COM  which  will  gain control of  batch  processing  and 
  96.         interpret  the  new commands within the batch file.   Note  that  this 
  97.         program should be resident on the same disk that the batch file is.
  98.  
  99.         Basicaly,  all extended batch file commands start with the word  'BAT' 
  100.         in  the batch file,  and all other commands (DOS or otherwise) do  not 
  101.         start with 'BAT'.  To be more exact, when a batch file starts running, 
  102.         all commands are executed from DOS just as any batch file would.  When 
  103.         it  comes across a statement which starts with 'BAT',  it loads in the 
  104.         extentions from the file BAT.COM which then starts execution.  The BAT 
  105.         program  takes the remainder of this line and the entire  contents  of 
  106.         all other lines and starts execution in the following fashion.
  107.  
  108.         <empty  line> - If a line from the batch file contains nothing (just a 
  109.         CR  LF) then the line is skipped and the next line is read  in.   This 
  110.         may be used to make a batch program more readable.
  111.  
  112.         BAT <empty line> - If a line from the batch file contains just the BAT 
  113.         keyword then the line will also be skipped.   Note that leading spaces 
  114.         or tabs will be allowed before the keyword BAT.
  115.  
  116.         BAT <command token> <operand token> - This is the normal format for an 
  117.         extended  batch  command line.   Not all commands have  operands  (eg.  
  118.         BEGTYPE, CLS) and some commands may have several (eg.  IF, TYPE, etc).  
  119.         Note  that leading spaces or tabs will be allowed before  the  keyword 
  120.         BAT.
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.                                            2
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.         <dos  command  line> - If the line is not an empty line and  does  not 
  137.         start with the keyword BAT, then it is considered to be a DOS command.  
  138.         The  DOS command is executed by setting it's text pointers back to the 
  139.         beginning of the line and then BAT.COM terminates.  This causes DOS to 
  140.         read and interpret the batch line in the standard way.  This continues 
  141.         until a DOS batch file statement contains BAT as it's first word which 
  142.         causes DOS to reload the extended batch facility.
  143.  
  144.         BAT.COM  would  then continue to interpret the remainder of that  line 
  145.         with  the rules above.   It will again continue to interpret lines  as 
  146.         long as they are either empty or contain the keyword BAT.
  147.  
  148.  
  149.              THE CONCEPT OF A TOKEN.
  150.              _______________________
  151.  
  152.         Since  the entire extended batch facility processing is  performed  by 
  153.         observing  tokens from the batch file,  the concept of tokens is  very 
  154.         important.
  155.  
  156.         Basically,  a  token is a string of characters whose final form has  a 
  157.         limit of 15 characters.   The token can be built up by any combination 
  158.         of literal characters or variables.
  159.  
  160.         Literal  characters are all the printable characters on your keyboard.  
  161.         Upper  or lower case characters mean the same thing to BAT and can  be 
  162.         used interchangeably.   If you print a token out, you will see them in 
  163.         upper  case.   For instance,  the characters wXyZ will create a  token 
  164.         which if printed will be WXYZ.
  165.  
  166.         Variables  may also be used to create tokens.   Built into the  system 
  167.         are  eleven  variables.   These are %0 to %9 and  a  special  variable 
  168.         called %R.   See the section on variables for more details about their 
  169.         uses.   Each variable can contain up to 15 characters and when used as 
  170.         a  token,  will  result in creating a token with the contents of  that 
  171.         variable.  For instance, if %0 contains the characters ABC, then using 
  172.         the token %0 in a batch file will be just like you had entered ABC  in 
  173.         it's place.
  174.  
  175.         Literal  characters  and variables can be combined to form  tokens  as 
  176.         well.   This is done by putting the variables and literals beside each 
  177.         other  in the batch file without spaces.   This will concatinate these 
  178.         strings, performing the proper substitutions for variables, and create 
  179.         a token of not more than 15 characters.   Trailing characters will  be 
  180.         truncated without errors if this limit is exceeded.
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.                                            3
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.         As an example,  if %0 contains ABC,  %1 contains XYZ, and %2 is empty, 
  203.         the following will result:
  204.  
  205.             BATCH FILE CONTAINS             RESULTING TOKEN IS
  206.                     Abc                             ABC
  207.                     %1                              XYZ
  208.                     123%1                           123XYZ
  209.                     %0123%1                         ABC123XYZ
  210.                     %0%2%1                          ABCXYZ
  211.                     123 %1                          123 XYZ
  212.  
  213.  
  214.         The  last  example actually creates two seperate tokens since a  space 
  215.         existed before the percent sign in the batch file.
  216.  
  217.  
  218.         These tokens which result are used within the commands described later 
  219.         to  control the actions or results they produce.   If %1 contains  XYZ 
  220.         again, then a batch file which contains .  .  .
  221.  
  222.             BAT TYPE ABC 123%1
  223.  
  224.             produces on the display . . .
  225.  
  226.             ABC 123XYZ
  227.  
  228.  
  229.              VARIABLES
  230.              _________
  231.  
  232.         Eleven  variables are available to BAT.   These are marked in a  batch 
  233.         file  with a percent sign.   Any of the following are  valid  variable 
  234.         names:
  235.  
  236.             %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %R
  237.  
  238.         The  last  variables is for return codes and is a special  case  which 
  239.         will  be  discussed later.   In general,  however,  each variable  can 
  240.         contain a string of 0 to 15 characters.
  241.  
  242.         In  the event that you wish to use a percent sign within a batch  file 
  243.         without  being taken as a variable name,  then two percent  signs  are 
  244.         needed.  That is, the statement:
  245.  
  246.                  BAT TYPE A percent sign is like %%
  247.             Would show:
  248.                  A PERCENT SIGN IS LIKE %
  249.  
  250.         When  batch processing begins,  DOS initialized the variables based on 
  251.         the original command line which invoked the batch file.   For example, 
  252.         for a batch file called TEST1, the following assignments are made:
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.                                            4
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.             For the command line . . .
  269.  
  270.             TEST1 DATAA DATAB
  271.  
  272.                The variable              would be initialized to
  273.                     %0                      TEST1
  274.                     %1                      DATAA
  275.                     %2                      DATAB
  276.                     %3 to %9                would be empty
  277.  
  278.         The  batch file can then alter the contents of any of these  variables 
  279.         through BAT.   When they are altered,  a DOS command within the  batch 
  280.         file can make use of the new value.  Lets say the mentioned batch file 
  281.         (TEST1) contains the following statements:
  282.  
  283.             BAT TYPE Now creating a backup of %1
  284.  
  285.  
  286.             BAT %3 = %1.TMP
  287.                   COPY %1 %3
  288.  
  289.  
  290.         When invoked, the batch file would create a new variable (%3) which is 
  291.         passed  back to DOS for the COPY command.   When it is  executed,  the 
  292.         following will be seen on the screen:
  293.  
  294.             User types:      TEST1 DATAA DATAB
  295.  
  296.             Batch responds:  NOW CREATING BACKUP OF DATAA
  297.                              A> COPY DATAA DATAA.TMP
  298.  
  299.              RETURN CODES
  300.              ____________
  301.  
  302.         There is a special variable %R for return codes.   This return code is 
  303.         intended for both extended batch commands and users routines.   It can 
  304.         indicate  to  an extended batch file what action should be taken as  a 
  305.         result of some condition such as a program abend,  normal or  abnormal 
  306.         execution, etc.
  307.  
  308.         The  user routine can setup a return code for BAT by saving it's value 
  309.         at location 0000:04FE.   The return code is one word long and  results 
  310.         in a hex value for the variable %R.
  311.  
  312.         This  special variable can not be stored into via BAT,  only  recalled 
  313.         from.   So  while  a statement like %9 = %R is valid,  %R = %9 is  not 
  314.         valid.
  315.  
  316.         The  following  portion  of a BASIC program can be used to  set  up  a 
  317.         return code before it exits.
  318.                     .
  319.             2000 DEF SEG=0 : POKE H04FE,H2B  'Setup return code of 2B
  320.             2010 DEF SEG                       'Restore basic's seg
  321.             2020 SYSTEM        'Return to DOS to do more batch file
  322.                     .
  323.  
  324.  
  325.                                            5
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.         When  BASIC  exits and batch processing resumes,  the  extended  batch 
  336.         commands allow for a test on the return code to control processing.  A 
  337.         sample batch file which might check it's result would be:
  338.  
  339.             BASICA SETRC
  340.             BAT IF %R = 2B TYPE The basic program exited abnormally.
  341.             BAT IF %R = 0  TYPE ** Congrat's - You had a normal exit! **
  342.  
  343.         Note that %r contains hex, not decimal values.  Also note that leading 
  344.         zeros are striped from %R before then token is generated.  For further 
  345.         examples  of  how return codes are used,  see the description  of  the 
  346.         command STATEOF.
  347.  
  348.  
  349.  
  350.                    EXTENDED BATCH FILE COMMANDS
  351.                    ____________________________
  352.  
  353.         The  following  list  summarizes  the  available  commands  that   are 
  354.         available  within  the  extended  batch  file  facility.   A  detailed 
  355.         description follows.
  356.  
  357.             BAT CLS
  358.  
  359.             BAT BEGTYPE ...[text]... END
  360.  
  361.             BAT DEC [variable]
  362.  
  363.             BAT EXIT
  364.  
  365.             BAT GOTO [-label.token]
  366.  
  367.             BAT IF [token1] [compare.token] [token2] [statement]
  368.  
  369.             BAT INC [variable]
  370.  
  371.             BAT READ [variable]...[variable]
  372.  
  373.             BAT SKIP [num.of.lines]
  374.  
  375.             BAT STATEOF [filename.token]
  376.  
  377.             BAT TYPE  [text.token]...[text.token]
  378.  
  379.             BAT -[label.token] [statement]
  380.  
  381.             BAT [variable] = [assignment.token]
  382.  
  383.             BAT * [comment]
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.                                            6
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.         COMMAND:  CLS
  401.  
  402.         FUNCTION:  Clears the screen.
  403.  
  404.         DESCRIPTION:   The  screen type (color 40,  color 80,  mono,  etc)  is 
  405.         sensed  via  BIOS  and this screen type is  reset.   This  results  in 
  406.         clearing  the  screen  of data.   This is very  useful  when  creating 
  407.         prompts  on the screen for the user and is often used just before  the 
  408.         commands  TYPE or BEGTYPE.   The remainder of the line after the  word 
  409.         CLS is ignored.
  410.  
  411.             RELATED COMMANDS: TYPE, BEGTYPE
  412.  
  413.             EXAMPLES:
  414.  
  415.                  BAT CLS
  416.                  BAT BEGTYPE
  417.                   This is a prompt for the user.
  418.                   He will see it on a new clear screen.
  419.                  end
  420.  
  421.  
  422.  
  423.         COMMAND:  BEGTYPE [..text..] END
  424.  
  425.         FUNCTION:  Types a series of lines directly from the batch file.
  426.  
  427.         DESCRIPTION:   The  remainder of the line after the command BEGTYPE is 
  428.         ignored  and scanning begins with the next line.   A line of  text  is 
  429.         read  from the batch file and the line is printed to the screen unless 
  430.         the line begins with 'END'.   The word END indicates that there are no 
  431.         more lines of text to be printed.  Either case is allowed for the word 
  432.         END.   Note that when END is the first thing on the line, nothing else 
  433.         is allowed before it.  Spaces and tabs are the only characters allowed 
  434.         before  this word.   This command is very useful for printing  a  long 
  435.         series of text to the user,  usually a prompt or menu.  The characters 
  436.         will appear exactly as in the batch file,  spaces,  case,  and control 
  437.         characters are preserved.
  438.  
  439.             RELATED COMMANDS: CLS, TYPE
  440.  
  441.             EXAMPLES:
  442.  
  443.                  BAT CLS
  444.                  BAT BEGTYPE
  445.  
  446.                   This is a prompt for the user.
  447.                   It will be seen on a new clear screen because of CLS
  448.  
  449.                   You may ask the user to select an option here:
  450.                         1 - First option
  451.                         2 - Second option.
  452.  
  453.                   End
  454.  
  455.  
  456.  
  457.                                            7
  458.  
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.         Note  the the final word END starts the last line.   All text  between 
  467.         the  BEGTYPE line and the END line will be seen on the screen  exactly 
  468.         as typed.
  469.  
  470.  
  471.  
  472.         COMMAND:  DEC [variable]
  473.  
  474.         FUNCTION:  To decrement a decimal number contained in a variable.
  475.  
  476.         DESCRIPTION:   The  purpose of this command is primary for  controling 
  477.         loops  within batch files and for possibly going through sequences  of 
  478.         file  names.   It does a decrement on the CONTENTS of a variable which 
  479.         is  the  operand  of this command.   The special variable  %R  is  not 
  480.         allowed as an operand.  Note that with this command, the string length 
  481.         of  the variable will never change.   That is,  the decrement  of  the 
  482.         number  100 is 099.   The user must supply as many zeros as needed  to 
  483.         allow  for the maximum number.   Remember that there is a 15 character 
  484.         limit  on  strings so the smallest number is 000000000000000  and  the 
  485.         bigest number is 999999999999999!   With a variable that contains just 
  486.         a  0,  the corresponding maximum number for this variable would be  9.  
  487.         Note  that  compares are done between character strings  and  not  the 
  488.         value of them.  This means that 000 and 00 would not be found equal.
  489.  
  490.         It will only decrement the numeric part of the variable.  For example, 
  491.         if the variable contains the string PROG100 then the decrement of this 
  492.         string is PROG099.   The alphanumeric portion of the variable will not 
  493.         be altered.  In addition, numbers to the left of any letters will also 
  494.         not be altered.  If the variable contains only letters or is empty, no 
  495.         change will occur.
  496.  
  497.             RELATED COMMANDS: IF, INC, Assignments
  498.  
  499.             EXAMPLES:
  500.  
  501.                  BAT %1 = 10
  502.                  BAT DEC %1
  503.                  BAT %2 = XYZ3PROG00
  504.                  BAT DEC %2
  505.                  BAT TYPE %1 %2
  506.  
  507.         After  this  batch  file is run,  the following would be seen  on  the 
  508.         screen:
  509.  
  510.                  09 XYZ3PROG99
  511.  
  512.         The following batch file will print the numbers 4 to 0 on the screen.
  513.  
  514.                  BAT %1 = 5
  515.                  BAT -LOOP DEC %1
  516.                  BAT TYPE %1
  517.                  BAT IF %1 0 GOTO -LOOP
  518.  
  519.  
  520.  
  521.  
  522.  
  523.                                            8
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.         COMMAND:  EXIT
  533.  
  534.         FUNCTION:  To terminate the batch file.
  535.  
  536.         DESCRIPTION:    Exit  requires  no  operands,   and  will  immediately 
  537.         terminate  the  batch file from being processed further and  DOS  will 
  538.         show  a prompt for accepting new commands from the user.   The 'double 
  539.         prompt' symptom of the standard batch file exits will not appear.  The 
  540.         use of this command is to return to DOS in the middle of a batch file.  
  541.         It  is  not necessary to use this command at the end of  batch  files.  
  542.         The normal end of file mark within the file will also exit in the same 
  543.         manner.
  544.  
  545.             RELATED COMMANDS: IF
  546.  
  547.             EXAMPLES:
  548.  
  549.                  BAT TYPE   Would you like to exit? (Y/N)
  550.                  BAT READ  %9
  551.                  BAT IF %9 = Y EXIT
  552.                  .
  553.  
  554.         In the above example,  the user is prompted to see if he would like to 
  555.         exit  the batch file before continuing.   If he types 'Y' and  presses 
  556.         enter, the compare will match and the batch file will end.  Otherwise, 
  557.         processing will continue.
  558.  
  559.  
  560.  
  561.         COMMAND:  GOTO [-label.token]
  562.  
  563.         FUNCTION:  To change the flow of execution within the batch file.
  564.  
  565.         DESCRIPTION:   The  operand following the command GOTO  is  tokenized.  
  566.         The  resulting  token must have '-' (minus) as it's  first  character.  
  567.         This  identifies it as a valid label name.   The batch processor  will 
  568.         then  start scanning at the top of the batch file for this label.   If 
  569.         it  is found,  command execution will resume processing at this  line.  
  570.         If it is not found,  an error will result.   Note that because of  the 
  571.         overhead involved in doing this branch,  the GOTO should not be heavly 
  572.         used at the end of a long batch file.
  573.  
  574.             RELATED COMMANDS: IF, SKIP
  575.  
  576.             EXAMPLES:
  577.  
  578.                  BAT -LOOP
  579.                  BAT TYPE This line is constantly being printed.
  580.                  BAT GOTO -LOOP
  581.  
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.                                            9
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.         COMMAND:  IF [test1.token] [compare.token] [test2.token] [...stmts...]
  599.  
  600.         FUNCTION:   To  test for various conditions in order to alter the  way 
  601.         the batch file executes.
  602.  
  603.         DESCRIPTION:   Three  tokens  are expected after the command word  IF.  
  604.         The  first  and third are tokens that are held  temporally  while  the 
  605.         compare is being made.  The second token must either be the characters 
  606.         '='  or '<>'.   This corresponds to equal and not-equal  respectively.  
  607.         For an equality to exist between two strings,  then must match exactly 
  608.         in both contents and length.   If the comparison is correct,  then the 
  609.         statement  that follows the IF command will be executed.   This may be 
  610.         ANY batch command.   Note that the statement following the IF does not 
  611.         contain the keyword 'BAT'.  If the comparison is incorrect,  then  the 
  612.         remainder  of  the line is skipped and command execution  will  resume 
  613.         with the next line.
  614.  
  615.             RELATED COMMANDS: GOTO, SKIP, INC, DEC, TYPE, EXIT, STATEOF
  616.  
  617.             EXAMPLES:
  618.  
  619.             All of the following IF statements will compare correctly:
  620.  
  621.                  BAT %1 = ABC
  622.                  BAT %2 =
  623.  
  624.                  BAT IF ABC = %1 TYPE The variable contains ABC.
  625.                  BAT IF 0 <> 00  TYPE These are different lengths.
  626.                  BAT IF AABCD = A%1D TYPE Token substitutions are made.
  627.                  BAT IF %2 <> %1 TYPE Variables are different lengths.
  628.                  BAT IF .%2 = .  TYPE This matches if var is empty.
  629.                  BAT IF BOX = BOX IF DOG <> CAT TYPE Did multi-if
  630.             compare.
  631.  
  632.         COMMAND:  INC [variable]
  633.  
  634.         FUNCTION:  To increment the numeric contents of a variable.
  635.  
  636.         DESCRIPTION:   This command will increment the portion of the variable 
  637.         which is numeric.  It is intended for looping within the batch file or 
  638.         for generating new increments of a file name.   It requires a variable 
  639.         as an operand.   The special variable %R is not allowed.  Refer to the 
  640.         DEC command for details of operation and the limitations it has.
  641.  
  642.             RELATED COMMANDS: DEC, IF, Assignments
  643.  
  644.             EXAMPLES:
  645.  
  646.                  BAT %1 = 997
  647.                  BAT -LOOP INC %1
  648.                  BAT TYPE %1
  649.                  BAT IF %1 003 GOTO -LOOP
  650.  
  651.  
  652.  
  653.  
  654.  
  655.                                           10
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.             This batch program will print this sequence of numbers on
  665.             the screen:
  666.  
  667.                  998
  668.                  999
  669.                  000
  670.                  001
  671.                  002
  672.                  003
  673.  
  674.         FUNCTION:   To  accept a responce from a user and assign it to one  or 
  675.         more variables.
  676.  
  677.         DESCRIPTION:  When the command word READ is seen in the batch file, an 
  678.         input line is accepted from the user.   All function keys are assigned 
  679.         to  the normal DOS edit functions.   When ENTER is pressed,  the input 
  680.         line is tokenized. Because it is tokenized, several things are done to 
  681.         the responce.  First, all lower case characters are converted to upper 
  682.         case.   Second,  if a variable name exists in the input line,  it will 
  683.         get substituted with the contents of the variable.   Third, words will 
  684.         be isolated with spaces as delimiters.   Therefore a responce of 'THIS 
  685.         IS MY ANSWER' will be assigned four seperate tokens.
  686.  
  687.         Once the responce is tokenized,  each token will be assigned in  order 
  688.         to  the variables indicated after the READ command.  When there are no 
  689.         more variables after the READ command to assign, ther remainder of the 
  690.         responce is thrown away.  The special variable %R is not allowed as an 
  691.         argument  of  the  READ command.   If there is more  variables  to  be 
  692.         assigned after the READ command than there are tokens from the  input, 
  693.         these variables will be cleared out to a empty state.
  694.  
  695.         Note  that there does not have to be any variables indicated after the 
  696.         command READ.   In this case,  BAT would wait for the enter key, throw 
  697.         away  any  responce,  then  continue to process the  next  batch  file 
  698.         command.  This is useful for pausing within the batch file.
  699.  
  700.             RELATED COMMANDS: BEGTYPE, IF, TYPE
  701.  
  702.             EXAMPLES:
  703.  
  704.                  BAT -again TYPE Type your first and last name.
  705.                  BAT READ %1 %2
  706.                  BAT IF .%1 = . GOTO -again
  707.                  BAT TYPE Hello %1 %2
  708.  
  709.             User sees:   TYPE YOUR FIRST AND LAST NAME.
  710.  
  711.             User just presses enter:
  712.             (Variable %1 will be empty, so the IF command will cause
  713.             execution to restart from the '-again' label.)
  714.  
  715.             User sees:   TYPE YOUR FIRST AND LAST NAME.
  716.  
  717.             User enters: frank canova jr.
  718.  
  719.  
  720.  
  721.                                           11
  722.  
  723.  
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730.             User sees:   HELLO FRANK CANOVA
  731.  
  732.         (Note that the 'jr.' is droped since there is no variable for it to be 
  733.         assigned to.
  734.  
  735.  
  736.  
  737.         COMMAND:  SKIP [num.of.lines]
  738.  
  739.         FUNCTION:  To do a forward jump by the specified number of lines.
  740.  
  741.         DESCRIPTION:   This  command does a forward jump only.   It should  be 
  742.         used  instead  of the GOTO command where ever possible since  it  will 
  743.         execute much faster, especially in large batch files.  The operand for 
  744.         this command is a decimal amount of lines to be skipped.   This  value 
  745.         is  NOT a token.   It may be a number between 0 and 9999.   If a  skip 
  746.         amount  is  so large that it will cause it to go past the end  of  the 
  747.         batch  file,  batch  execution will terminate (a poor coder's  way  of 
  748.         doing an EXIT command!).
  749.  
  750.             RELATED COMMANDS: GOTO, IF
  751.  
  752.             EXAMPLES:
  753.  
  754.                  BAT -top READ %1
  755.                  BAT IF .%1 <> . SKIP 2
  756.                  BAT    TYPE You must give a responce, try again.
  757.                  BAT    GOTO -top
  758.                  BAT TYPE Thank you for your reply.
  759.  
  760.         In the above example,  if the user enters nothing to the READ command, 
  761.         the comparison at the IF will fail and a message is printed.  The GOTO 
  762.         command  is  needed  here  because it is a  backward  reference  jump.  
  763.         However,  if the user does enter something, the SKIP command will jump 
  764.         over these two lines which would print the 'thank you' message.
  765.  
  766.  
  767.  
  768.         COMMAND:  STATEOF [filename.token]
  769.  
  770.         FUNCTION:  To serch the diskettes to see if a file exists.
  771.  
  772.         DESCRIPTION:   This command is one of the most complex and powerful of 
  773.         the  capabilities  of  BAT.   First,  the operand of  the  command  is 
  774.         tokenized.   This  operand is a file name.   It may be one of  several 
  775.         forms:   A very general name with 'wildcards' (e.g.   *.* or BA?.*  or 
  776.         *.COM);   Or  it can be a specific file name without a drive specifier 
  777.         (e.g.   BAT.COM,  BATDEMO.BAT, etc.);  Or it can be a file name with a 
  778.         specific drive (e.g.  A:BAT.COM, B:*.*, etc.).
  779.  
  780.         If there is a specific drive in the file name,  then this will be  the 
  781.         only drive that will be serched.  If there is no drive specified, then 
  782.         all  drives will be serched,  first with the default drive,  then with 
  783.         all remaining drives starting with A and ending with D.  For instance, 
  784.         if B is the default drive,  the serch order will be B,  A, C, D.  If a 
  785.  
  786.  
  787.                                           12
  788.  
  789.  
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.         drive is not installed,  it will be skipped.   If a drive is installed 
  797.         but does not have a diskette in place, then a timeout error will occur 
  798.         which causes the drive to be ignored.
  799.  
  800.         As the diskette is serched,  as scan is made of the directory for  the 
  801.         first  match of the file name given.   For any 'wildcards' in the file 
  802.         name,  any  directory entry will match as long as  the  'non-wildcard' 
  803.         characters  match  the  entry exactly.   That is,  if the file  to  be 
  804.         serched  for is BA*.*,  then both BAT.COM and BATDEMO.BAT will  match, 
  805.         but COMMAND.COM will not.
  806.  
  807.         When a directory match is found, the entire file name will be assigned 
  808.         to  the last variable name in the original operand for  this  command.  
  809.         That  is,  if  the variable %9 contains '*.*',  then after  the  batch 
  810.         command  'STATEOF %9' is executed,  then the variable will most likely 
  811.         contain  'A:COMMAND.COM' which is the first directory entry  it  finds 
  812.         that  matched the original file name.   If no variable existed in  the 
  813.         original batch command, such as 'STATEOF TEST.DAT', then no assignment 
  814.         will be made.
  815.  
  816.         The special variable %R, which is used for return codes, will indicate 
  817.         if  a file was found.   After STATEOF executes,  one of the  following 
  818.         return codes will be found:
  819.  
  820.                  0 - The file was found. No switch had to be made to an
  821.                  alternated drive in order to find a directory match.
  822.  
  823.                  1 - The file was not found. If a specific drive was
  824.                  originally specified, then the requested file might
  825.                  still exist on another drive, but was not serched. If
  826.                  no specific drive was specified, then the file was not
  827.                  found after serching all available diskettes.
  828.  
  829.                  9 - An invalid file name was given. For example
  830.                  'E:TEST.DAT' specifies an invalid drive.
  831.  
  832.  
  833.                        A - Same as return code 0, but the STATEOF command had
  834.                  to switch to drive A to find the file.
  835.  
  836.                  B - Same as A but was found on drive B. 
  837.  
  838.                  C - Same as A but was found on drive C. 
  839.  
  840.                  D - Same as A but was found on drive D. 
  841.  
  842.  
  843.  
  844.  
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.                                           13
  854.  
  855.  
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.             RELATED COMMANDS: READ, IF, TYPE
  863.  
  864.             EXAMPLES:
  865.  
  866.                  BAT STATEOF %9 = *.FIL
  867.                  BAT TYPE Test1 RC=%r filename= %9
  868.  
  869.                  BAT %9 = *.COM
  870.                  BAT TYPE Test2 serching for %9
  871.                  BAT STATEOF %9
  872.                  BAT TYPE Test2 RC=%r, filename= %9
  873.  
  874.                  BAT %1 = B*.*
  875.                  BAT %2 =
  876.                  BAT STATEOF %1%2
  877.                  BAT TYPE Test3 RC=%r, filename1= %1, filename2= %2
  878.  
  879.         If the diskette A contains COMMAND.COM and diskette B contains BAT.COM 
  880.         and  diskette  A is the default drive,  the following will be  printed 
  881.         from the previous batch file.
  882.  
  883.             TEST1 RC=1 FILENAME= *.FIL
  884.             TEST2 SERCHING FOR *.COM
  885.             TEST2 RC=0, FILENAME= A:COMMAND.COM
  886.             TEST3 RC=B, FILENAME1= B*.*, FILENAME2= B:BAT.COM
  887.  
  888.  
  889.  
  890.         COMMAND:  TYPE [text.token] ...  [text.token]
  891.  
  892.         FUNCTION:   To  print  on  the screen messages  and  the  contents  of 
  893.                     variables.
  894.  
  895.         DESCRIPTION:   The  TYPE  command  accepts any  number  of  tokens  as 
  896.         operands.   Read  the  description  on  tokens to find  out  the  many 
  897.         variations of their format.   Basically however,  character  literals, 
  898.         any  variable  (including  %R),  and any combination of  them  can  be 
  899.         printed.   After the line is tokenized, each token is printed in upper 
  900.         case.   Only  one  space will seperate each token.   If a variable  is 
  901.         empty and is printed out, an additional space will appear.
  902.  
  903.             RELATED COMMANDS: BEGTYPE
  904.  
  905.             EXAMPLES:
  906.  
  907.                  BAT %1 = hello
  908.                  BAT TYPE     this     IS    some    TEXT
  909.                  BAT TYPE The current variable %%1 = %1
  910.                  BAT TYPE The current return code is %r
  911.  
  912.             When executed, the following will appear on the screen:
  913.  
  914.             THIS IS SOME TEXT
  915.             THE CURRENT VARIABLE %1 = HELLO
  916.             THE CURRENT RETURN CODE IS 0
  917.  
  918.  
  919.                                           14
  920.  
  921.  
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.         COMMAND:  [-label.token] [statement]
  929.  
  930.         FUNCTION:  This is the destination of a jump via the GOTO command.
  931.  
  932.         DESCRIPTION:  This label is not actually a command, but the format for 
  933.         any  standard  statement.   The label itself is a  token  whose  first 
  934.         character  is  a  '-'  (minus)  sign.    Normally  during  batch  file 
  935.         processing,  when  a line contains a so called command of this format, 
  936.         it is skipped and the next token is used as the command.   When a GOTO 
  937.         command is processed,  the entire batch file will be scanned  starting 
  938.         from  the top for this label.   When found,  scanning stops and  batch 
  939.         file processing will resume with this line.
  940.  
  941.         For example,  with the statement:  BAT -SELF GOTO -SELF.  The word BAT 
  942.         identifies the line as a non-DOS command.   The first -SELF is seen as 
  943.         a  label  and skipped,  the next token will be taken as  the  command.  
  944.         Then  GOTO  is seen as the command whose operand is the next  token  -
  945.         SELF.  This batch line, of course, will execute in an infinite loop.
  946.  
  947.             RELATED COMMANDS: GOTO
  948.  
  949.             EXAMPLES:
  950.  
  951.                  BAT -TOP
  952.                  BAT    TYPE Select A, B, or X
  953.                  BAT    READ %9
  954.                  BAT    GOTO -%9
  955.                  BAT -A TYPE you selected option a.
  956.                  BAT    GOTO -TOP
  957.                  BAT -B TYPE you selected option b.
  958.                  BAT    GOTO -TOP
  959.                  BAT -X EXIT
  960.                  BAT -%9 TYPE you didn't select the proper option.
  961.                  BAT    GOTO -TOP
  962.  
  963.         Note  that you do not have to have a statement after the label.   Note 
  964.         also that in the above example,  since the label is a token, the label 
  965.         '-%9' will always match if the others do not.
  966.  
  967.  
  968.  
  969.         COMMAND:  [variable] = [assignment.token]
  970.  
  971.         FUNCTION:  To assign a variable a string value.
  972.  
  973.         DESCRIPTION:   If  the  first  character  in  the  command  is  a  '%' 
  974.         (percent),  then it is consitered to be an assignment statement of the 
  975.         above form.   The next token on the line must be an equal  sign.   The 
  976.         third  token  is  any of the possible variations on  tokens  described 
  977.         previously.   This third token does not have to exist.   In this case, 
  978.         the  token is consitered to be empty.   The resulting third  token  is 
  979.         then moved to the first variable.
  980.  
  981.  
  982.  
  983.  
  984.  
  985.                                           15
  986.  
  987.  
  988.  
  989.  
  990.  
  991.  
  992.  
  993.  
  994.         The  first variable cannot be the special variable %R,  but may be any 
  995.         of the other variables %0 to %9.   If a DOS command is later  executed 
  996.         and uses one of these variables, it will be properly replaced with the 
  997.         contents of that variable.
  998.  
  999.             RELATED COMMANDS: IF, TYPE
  1000.  
  1001.             EXAMPLES:
  1002.  
  1003.                  BAT %1 = ABC
  1004.                  BAT %2 = DEF
  1005.                  BAT %3 = ANS=%1%2
  1006.  
  1007.                  BAT TYPE %1 %2 %3
  1008.  
  1009.         When  the resulting batch file is run,  the following will be seen  on 
  1010.         the screen:
  1011.  
  1012.                  ABC DEF ANS=ABCDEF
  1013.  
  1014.  
  1015.  
  1016.         COMMAND:  *[comment line]
  1017.  
  1018.         FUNCTION:  To allow comments to be seen in the batch file.
  1019.  
  1020.         DESCRIPTION:   When  the '*' (star) character is seen as a command  in 
  1021.         the batch file, the remain characters on the line are skipped over and 
  1022.         processing  begins with the next line.   The comment is not printed on 
  1023.         the  screen  to  the  user and is intended  only  to  provide  helpful 
  1024.         information within the batch file.
  1025.  
  1026.             RELATED COMMANDS: none
  1027.  
  1028.             EXAMPLES:
  1029.  
  1030.                  BAT * This is a comment.
  1031.                  BAT TYPE This is a text line on the screen.
  1032.                  BAT * This text line is a comment to the programmer.
  1033.  
  1034.  
  1035.                   PROGRAMMING TIPS AND TECHNIQUES
  1036.                   _______________________________
  1037.  
  1038.         Use  SKIP  instead  of GOTO when doing forward references  where  ever 
  1039.         possible.
  1040.  
  1041.         Try  to have loops in the batch file near the beginning.   These  will 
  1042.         execute  faster.   Remember  that GOTO's scan the  entire  batch  file 
  1043.         starting  from the top.   If the matching label is near the bottom,  a 
  1044.         slight delay will be seen.
  1045.  
  1046.  
  1047.  
  1048.  
  1049.  
  1050.  
  1051.                                           16
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060.             Be cautious with the following types of lines:
  1061.  
  1062.             1.   Lines that use %R   (return codes)
  1063.             2.   Assignment commands (e.g. %1 = XYZ)
  1064.  
  1065.         These  two  types  of lines CANNOT be used  immediately  after  a  DOS 
  1066.         command.   This is because that DOS commands will do substitutions for 
  1067.         variables  before  BAT  has a chance to  execute.   Because  of  this, 
  1068.         substitutions  will not be properly done for these two types of  batch 
  1069.         file lines.   If it is necessary to do this type of function, then put 
  1070.         in  a  line that just contains the word 'BAT' between the DOS  command 
  1071.         line  and the suspect BAT line.   This will cause BAT to  be  reloaded 
  1072.         before executing the suspect line.  That is .  .  .
  1073.  
  1074.             This is illegal:
  1075.                  BAT * The following is a dos command.
  1076.                  DIR B:*.*
  1077.                  BAT TYPE The current return code is %R
  1078.  
  1079.             This is legal:
  1080.                  BAT * The following is a dos command.
  1081.                  DIR B:*.*
  1082.                  BAT
  1083.                  BAT TYPE The current return code is %R
  1084.  
  1085.         It  is  unfortunate  that this  restriction  exists,  however,  it  is 
  1086.         unavoidable  unless COMMAND.COM is to be rewritten (which I don't plan 
  1087.         on doing!).
  1088.  
  1089.  
  1090.  
  1091.  
  1092.  
  1093.  
  1094.  
  1095.  
  1096.  
  1097.  
  1098.  
  1099.  
  1100.  
  1101.  
  1102.  
  1103.  
  1104.  
  1105.  
  1106.  
  1107.  
  1108.  
  1109.  
  1110.  
  1111.  
  1112.  
  1113.  
  1114.  
  1115.  
  1116.  
  1117.                                           17
  1118.  
  1119.  
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  doing!).
  1125.  
  1126.  
  1127.  
  1128.  
  1129.  
  1130.  
  1131.  
  1132.  
  1133.  
  1134.  
  1135.  
  1136.